home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / m2 / cat3src / cat / printer.d < prev    next >
Text File  |  1997-10-26  |  9KB  |  216 lines

  1. DEFINITION MODULE Printer;
  2. (*****************************************************************************
  3.   Projekt:
  4.   Datei  : PRINTER.D
  5.   Datum  : 17.1.1992
  6.   Autor  : Uwe Mindrup, Altewiekring 13, 3300 Braunschweig; (0531) 79 78 40
  7.  
  8.   V 1.09: 17.01.92   Variable 'Proportional' zus„tzlich in SendInit
  9.                      initialisiert.
  10.   V 1.08: 30.07.91   Umstellung auf Compiler 4.00 und neue Bibliotheken
  11.   V 1.07: 03.03.91   Die Druckerinitialisierung war nicht vollst„ndig.
  12.                      Optimierung der Druckercharakteristik-Tabelle hinzugefgt.
  13.   V 1.06: 01.03.91   'Effect' hinzugefgt.
  14.   V 1.05: 26.02.91   Fehler in Translation-Prozedur behoben.
  15.                      Fehler in SetMode behoben.
  16.                      Diverse Prozeduren 'gestrafft'.
  17.   V 1.04: 18.02.91   Proportionalschrift verbessert.
  18.   V 1.03: 14.02.91   Erg„nzung um Proportionalschrift
  19.   V 1.02: 12.11.90   'ErrorProc' mit Rckgabewert ausgestattet; wird bei
  20.                      '...DeviceBusy' FALSE zurckgeliefert, wird die Aktion
  21.                      abgebrochen; bei TRUE wird weitergearbeitet.
  22.                      'SetTabSize' eingefhrt.
  23.   V 1.01: 07.11.90   Fehler beim Setzen von Schrifttyp und Farbauswahl
  24.                      ausgemerzt.
  25.   V 1.00: 04.11.90   Erste Umsetzung auf GEM+
  26.  
  27.    Druckertreiber;
  28.    Der Druckertreiber dient dazu, Texte mit Hilfe der reichlich vorhandenen
  29.    Druckeranpassungen fr Wordplus ausdrucken zu k”nnen. Zur Initialisierung
  30.    muž eine CFG-Datei geladen werden.
  31.    Aufbau einer CFG-Datei:
  32.    - Header 'GST-CFG:'; dient als Kennung zur Unterscheidung von anderen
  33.                         Formaten.
  34.    - Es folgen sechs Bytes mit folgender Bedeutung:
  35.      (1)   1 fr Typenrad mit horizontalem Spacing, sonst 0
  36.      (2)   Zeichenbreite in Druckereinheiten (Typenrad)
  37.      (3)   Zeilenabstand in Druckereinheiten
  38.      (4)   Wagenmitte (Typenrad); Pixel/Inch (Matrixdrucker)
  39.      (5)   Zeichenabstand bei Fettdruck (Typenrad)
  40.      (6)   1 Pause mit Abfrage zwischen Seiten, sonst 0
  41.      Diese Werte werden vom vorliegenden Modul ignoriert.
  42.  
  43.    - Jetzt folgen die Druckercharakteristiken.
  44.      Diese Tabelle enth„lt die Steuersequenzen, die zur Steuerung des
  45.      Druckers benutzt werden (hoch, tief, fett, unterstrichen, kursiv,
  46.      Draft, NLQ etc).
  47.      Die Tabelle endet mit einem Null-Byte.
  48.    - Zuletzt folgt die šbersetzungstabelle. Hier werden einzelne Zeichen
  49.      in andere Zeichen (-folgen) umgesetzt.
  50.      Auch diese Tabelle endet mit einem Null-Byte.
  51.  
  52.    Bei einer Initialisierung werden alle Aussschaltsequenzen der aktuellen
  53.    Druckqualit„t sowie die horizontale und vertikale Initialisierung durch-
  54.    laufen.
  55.    Sind die Sequenzen der Druckercharakteristiken fr die beiden
  56.    Druckqualit„ten gleich (unterscheiden sich also nur durch die Ein/Ausschalt-
  57.    sequenz fr NLQ/Draft), dann reicht es aus, nur bei einer Ausschaltsequenz
  58.    die entsprechende Schriftqualit„t zu setzen (am besten bei einer selten
  59.    ben”tigten Sequenz, z.B. Index unten).
  60.    Mehr noch: Fr die brigen Druckercharakteristiken reicht es aus, wenn die
  61.    Sequenz nur in der einen Schriftqualit„t gesetzt wird. Der Treiber setzt die
  62.    Sequenz automatisch auch fr die andere Schriftqualit„t ein.
  63.  
  64. *******************************************************************************)
  65.  
  66. CONST cCon       = "CON:";
  67.       cAux       = "AUX:";
  68.       cPrn       = "PRN:";
  69.  
  70.       cPica      = 0;    (* 10 cpi *)
  71.       cElite     = 1;    (* 12 cpi *)
  72.       cCondensed = 2;    (* 17 cpi *)
  73.       cExpanded  = 3;    (*  6 cpi *)
  74.  
  75.       cFat        = 0;   (* fett          *)
  76.       cLightened  = 1;   (* hell          *)
  77.       cSlanted    = 2;   (* kursiv        *)
  78.       cUnderlined = 3;   (* unterstrichen *)
  79.  
  80.       (* Color-Farbb„nder: *)
  81.       cBlack     = 0;
  82.       cMagenta   = 1;
  83.       cCyan      = 2;
  84.       cYellow    = 3;
  85.  
  86. TYPE  tResponse  = (done, notdone, noMemory, CFGnotFound, wrongIdent,
  87.                     ErrorInStreams, Cancelled,
  88.                     PrnDeviceBusy, AuxDeviceBusy, ConDeviceBusy);
  89.       tErrorProc = PROCEDURE (tResponse): BOOLEAN;
  90.  
  91.  
  92. VAR Response  : tResponse;
  93.     ErrorProc : tErrorProc;           (* ist mit 'DummyError' initialisiert *)
  94.  
  95. PROCEDURE LoadCFGFile(VAR name: ARRAY OF CHAR);
  96. (* Er”ffnung einer CFG-Datei. Der komplette Dateiname muž bergeben werden.
  97.    Falls keine Er”ffnung m”glich war, wird 'Response' auf 'CFGnotFound' gesetzt.
  98.    Die Extension wird ggfs. automatisch korrigiert.
  99.    Die Datei wird nach Er”ffnung auf die Dateikennung in den ersten 8 Bytes
  100.    berprft ('GST-CFG:'). Falls die Kennung nicht bereinstimmt, wird
  101.    die Datei wieder geschlossen und 'Response' auf 'wrongIdent' gesetzt.
  102.    Im Erfolgsfall enth„lt 'Response' 'done'.
  103. *)
  104.  
  105. PROCEDURE FreeCFGFile();
  106. (* L”scht eine bereits geladene CFG-Datei aus dem Speicher
  107.  *)
  108.  
  109. PROCEDURE QueryCFGFile(VAR path, name    : ARRAY OF CHAR;
  110.                        REF InfoText: ARRAY OF CHAR);
  111. (* erfragt eine CFG-Datei per FileSelectBox.
  112.    InfoText ist fr die FileSelectBox gedacht.
  113.    Die Endung wird fest auf '*.CFG' festgeschrieben.
  114.    Die Funktion ruft anschliežend OpenCFGFile auf.
  115. *)
  116. PROCEDURE GetPrnName(VAR Printername: ARRAY OF CHAR);
  117. (* Eingetragenen Druckernamen liefern. Falls keiner vorhanden ist, dann
  118.    wird ein Leerstring ('') geliefert.
  119.  *)
  120.  
  121. PROCEDURE SendExit();
  122. (*  Es wird Eintrag 21H (Allgemeiner Druckerreset am Textende) gesendet. *)
  123.  
  124. PROCEDURE SendInit(NLQ: BOOLEAN; hAndVInit: BOOLEAN);
  125. (* Drucker-Initialisierung senden. Es werden nacheinander folgende
  126.    Eintr„ge geschickt (in Klammern die NLQ-Eintr„ge):
  127.    - Eintrag 20H       Horizontale Initialisierung (nur bei hAndVInit = TRUE)
  128.    - Eintrag 1FH       Vertikale Initialisierung (nur bei hAndVInit = TRUE)
  129.    - Eintrag  7H ( 9H) Fettschrift aus.
  130.    - Eintrag  BH ( DH) Kursivschrift aus.
  131.    - Eintrag  FH (11H) Light aus.
  132.    - Eintrag 13H (15H) Superscript aus.
  133.    - Eintrag 17H (19H) Subscript aus.
  134.    - Eintrag 1BH (1DH) Unterstreichung aus.
  135.    Falls vorhanden, werden noch die folgenden Sequenzn geschickt:
  136.    - Eintrag 28H (29H) PICA (10 CPI).
  137.    - Eintrag 30H       Color-Einstellung: Black.
  138.    - Eintrag 35H       Proportional-Schrift wird ausgeschaltet.
  139.  *)
  140.  
  141. PROCEDURE SetMode(Mode : SHORTINT);
  142. (*  Zeichenbreite einstellen.
  143.     Achtung: vorher 'SendInit' durchfhren!
  144.     Untersttzt werden:
  145.     - cPica      = 0;    (* 10 cpi *)
  146.     - cElite     = 1;    (* 12 cpi *)
  147.     - cCondensed = 2;    (* 17 cpi *)
  148.     - cExpanded  = 3;    (*  6 cpi *)
  149.  *)
  150.  
  151. PROCEDURE SetColor(Color : SHORTINT);
  152. (*  Farbe einstellen. Untersttzt werden folgende Farben:
  153.     - cBlack     = 0;
  154.     - cMagenta   = 1;
  155.     - cCyan      = 2;
  156.     - cYellow    = 3;
  157. *)
  158. PROCEDURE SetPropSize(Prop: BOOLEAN; PropSize: SHORTINT);
  159. (* Ein/Ausschalten der Proportionalschrift sowie Setzen einer mittleren
  160.    Zeichenbreite (fr Tabulierung notwendig)
  161. *)
  162.  
  163. PROCEDURE Bold(Set: BOOLEAN);         (* Fettdruck ein/ausschalten          *)
  164.  
  165. PROCEDURE Light(Set: BOOLEAN);        (* Helle Schrift ein/ausschalten      *)
  166.  
  167. PROCEDURE Italic(Set: BOOLEAN);       (* Schr„gschrift ein/ausschalten      *)
  168.  
  169. PROCEDURE Underline(Set: BOOLEAN);    (* Unterstreichen ein/ausschalten     *)
  170.  
  171.  
  172. PROCEDURE Superscript(Set: BOOLEAN);  (* Hochstellen ein/ausschalten        *)
  173.  
  174. PROCEDURE Subscript(Set: BOOLEAN);    (* Tiefstellen ein/ausschalten        *)
  175.  
  176.  
  177. PROCEDURE Effect(Effects: BITSET; Set: BOOLEAN);
  178. (* Texteffekte setzen/rcksetzen.
  179.    Die Wertung im BITSET ist wie folgt:
  180.    0 : fett,
  181.    1 : hell,
  182.    2 : kursiv,
  183.    3 : unterstrichen
  184.  *)
  185.  
  186. PROCEDURE FormFeed();                 (* Seitenvorschub ausgeben            *)
  187.  
  188. PROCEDURE SetTabSize(Tab: SHORTINT);  (* Tabulatorweite einstellen          *)
  189.  
  190. PROCEDURE WriteLn();                  (* Zeilenvorschub generieren          *)
  191.  
  192. PROCEDURE Write(ch: CHAR);
  193.  
  194. PROCEDURE WriteString(REF Str: ARRAY OF CHAR);
  195.  
  196. PROCEDURE Open(REF Name: ARRAY OF CHAR);
  197. (* Er”ffnung eines Druckerkanals; wenn ein Fehler auftritt, wird 'Response'
  198.    auf 'ErrorInStreams' gestellt; die eigentliche Fehlerursache ist dann bei
  199.    'Streams.Response' zu suchen.
  200. *)
  201.  
  202. PROCEDURE Close();
  203. (* Schliežung eines Druckerkanals; wenn ein Fehler auftritt, wird 'Response'
  204.    auf 'ErrorInStreams' gestellt; die eigentliche Fehlerursache ist dann bei
  205.    'Streams.Response' zu suchen.
  206. *)
  207.  
  208. PROCEDURE DummyError(ErrNr : tResponse): BOOLEAN;
  209. (* Mit dieser Fehlerprozedur ist 'ErrorProc' initialisiert. Sie besteht nur
  210.    aus einem 'RETURN TRUE'.
  211.    Mit Hilfe der ProzedurVariablen 'ErrorProc' kann eine eigene Fehlerausgabe
  212.    angegeben werden.
  213.  *)
  214.  
  215. END Printer.
  216.